package com.zjl.quartz.第01章_基础的使用;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class C_Demo {

    public static void main(String[] args) throws SchedulerException {
        SchedulerFactory schedulerfactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerfactory.getScheduler();//构建调度程序
//        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();


        JobDetail job = JobBuilder//构建定时任务
                .newJob(C_Job.class)//放入需要任务的类
                .withIdentity("jobName", "jobGroupName")//放入任务的名称和分组
                .usingJobData("我是Job的Key","我是Job的Value")//放入定时任务的参数
                .usingJobData("name","我是Job的name")//放入定时任务的参数
                .usingJobData("count",1)//放入定时任务的参数
                .build();
        // 各种builder 的基本使用
        SimpleScheduleBuilder simpleScheduleBuilder =
                SimpleScheduleBuilder
                        .simpleSchedule()
                        .repeatForever()//一直重复
                        .withIntervalInSeconds(3);//3秒
        CronScheduleBuilder cronScheduleBuilder =
                CronScheduleBuilder
                        .cronSchedule("*/3 * * * * ?");
        CalendarIntervalScheduleBuilder calendarIntervalScheduleBuilder =
                CalendarIntervalScheduleBuilder
                        .calendarIntervalSchedule()
                        .withInterval(3, DateBuilder.IntervalUnit.SECOND);
        DailyTimeIntervalScheduleBuilder dailyTimeIntervalScheduleBuilder =
                DailyTimeIntervalScheduleBuilder
                        .dailyTimeIntervalSchedule()
                        .withIntervalInSeconds(3);

        Trigger trigger =  TriggerBuilder//定义触发器
                .newTrigger()
                .withIdentity("jobName", "jobGroupName")//触发器的名称，和触发器的分组
                .usingJobData("我是Trigger的Key","我是Trigger的Value")
                .withSchedule(dailyTimeIntervalScheduleBuilder)//触发策略
                .startNow()//立即执行
                .build();
        //给调度程序 传入 任务和  触发器
        scheduler.scheduleJob(job, trigger);
        //Quartz 每次在执行任务的时候，都会创建新的 Job 对象和 JobDetail 对象。 防止并发问题
        scheduler.start();//启动
        //scheduler.shutdown();//关闭
    }
}
